// #include <mosquitto.h>
// #include <cstring>
// #include <thread>  // For std::this_thread::sleep_for

// class MqttClient
// {
// public:
//     MqttClient(const char *host, const char *username, const char *password)
//         : host_(host), username_(username), password_(password), mosq_(nullptr)
//     {
//         // 初始化 mosquitto 库
//         mosquitto_lib_init();
//     }

//     ~MqttClient()
//     {
//         // 清理 mosquitto 客户端
//         if (mosq_)
//         {
//             mosquitto_destroy(mosq_);
//         }
//         // 清理 mosquitto 库
//         mosquitto_lib_cleanup();
//     }

//     bool connect()
//     {
//         // 创建一个新的 mosquitto 客户端实例
//         mosq_ = mosquitto_new(nullptr, true, this);
//         if (!mosq_)
//         {
//             printf("Failed to create mosquitto instance!\n");
//             return false;
//         }

//         // 设置回调函数
//         mosquitto_connect_callback_set(mosq_, on_connect);
//         mosquitto_publish_callback_set(mosq_, on_publish);
//         mosquitto_message_callback_set(mosq_, on_message);
//         mosquitto_log_callback_set(mosq_, on_log);

//         if (username_ != "" && password_ != "")
//         {
//             // 设置用户名和密码
//             mosquitto_username_pw_set(mosq_, username_, password_);
//         }

//         // 连接到 MQTT Broker
//         int rc = mosquitto_connect(mosq_, host_, 1883, 60);
//         if (rc != MOSQ_ERR_SUCCESS)
//         {
//             printf("Unable to connect to broker: %s\n", mosquitto_strerror(rc));
//             return false;
//         }

//         // 启动 MQTT 客户端循环，处理网络和回调
//         mosquitto_loop_start(mosq_);
//         return true;
//     }

//     bool publish(const char *topic, const char *message)
//     {
//         // 发布消息
//         int rc = mosquitto_publish(mosq_, nullptr, topic, strlen(message), message, 0, false);
//         if (rc != MOSQ_ERR_SUCCESS)
//         {
//             printf("Unable to publish message: %s\n", mosquitto_strerror(rc));
//             return false;
//         }
//         return true;
//     }

// private:
//     const char *host_;
//     const char *username_;
//     const char *password_;
//     mosquitto *mosq_;

//     static void on_connect(struct mosquitto *mosq, void *obj, int rc)
//     {
//         if (rc == MOSQ_ERR_SUCCESS)
//         {
//             printf("Connected to broker successfully!\n");
//         }
//         else
//         {
//             printf("Failed to connect to broker: %s\n", mosquitto_strerror(rc));
//         }
//     }

//     static void on_publish(struct mosquitto *mosq, void *obj, int mid)
//     {
//         // Print the message ID and success/failure
//         printf("Message published with ID: %d\n", mid);

//         // To improve this, we need to also track the result of the publish operation
//         // which would be handled by checking the return code when calling `mosquitto_publish`.
//         // However, as this callback only provides the message ID, it's not possible to 
//         // determine failure within this function alone.
//     }

//     static void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message)
//     {
//         printf("Received message: %s on topic: %s\n", (char*)message->payload, message->topic);
//     }

//     static void on_log(struct mosquitto *mosq, void *obj, int level, const char *str)
//     {
//         printf("Log: %s\n", str);
//     }
// };

// extern MqttClient mqttClient("101.35.104.65", "yn123456", "yn12345678");

// int main()
// {
//     const char *host = "101.35.104.65";                                // MQTT Broker 地址
//     const char *topic = "tcu/test";                                    // 订阅的主题
//     const char *message = "Hello, this is a test 333333333333!"; // 消息内容
//     const char *username = "yn123456";                                 // 用户名
//     const char *password = "yn12345678";                               // 密码

//     // 创建 MqttClient 实例
//     if (!mqttClient.connect())
//     {
//         return 1;
//     }

//     // 发布消息
//     if (!mqttClient.publish(topic, message))
//     {
//         return 1;
//     }

//     printf("Message published successfully!\n");

//     // 等待一段时间，处理回调
//     // std::this_thread::sleep_for(std::chrono::seconds(5));  // 等待 5 秒钟

//     return 0;
// }
